﻿using System;
using System.Windows.Forms;
using  LayerLogic ;

using LayerEntity.Persona;
namespace System2012.Persona.UserControls
{
    public partial class UCContacto : DevExpress.XtraEditors.XtraUserControl
    {
        public UCContacto()
        {
            this.InitializeComponent();
            //NuevoContancto();
        }

        #region Variables y Propiedades
        EnumOperaciones op=EnumOperaciones .Insertar ;
        EnumOperaciones opRel = EnumOperaciones.Insertar;
        public LayerLogic.EnumOperaciones OperacionRelacion {
            get {
                return opRel;
            }
        }
        public LayerLogic.EnumOperaciones Operacion { get {
            return op;
        } }
        public bool  IsContactoExistente{
            get {
                return contactoExiste;
            }
    }
        int idRegistro=0;
        int idRelacion = 0;
        bool contactoExiste = false;
        LayerLogic.EnumTipoContacto tipoContacto;
        #endregion

        private void ClickBuscarUbigeo(object sender, EventArgs e)
        {
            System2012.Sistema.Ubigeos.BuscarUbigeo b = new System2012.Sistema.Ubigeos.BuscarUbigeo();
            b.ShowDialog();
            if (b.StateSelection)
            {
                this.TxtDesUbigeo.EditValue = b.UbigeoSelected.ToString();
                TxtUbigeo.EditValue = b.UbigeoSelected.Ubigeo;
            }
            b.Dispose();
        }

        #region Metodos
       
        internal void SetContacto(EContacto contactInfo) {
            if (contactInfo != null) {                
                idRegistro = contactInfo.Item;
                op = EnumOperaciones.Actualizar;
                idRelacion = contactInfo.IdRelacion;
                TxtContacto.EditValue = contactInfo.NombreContacto;
                CbDocumento.EditValue = contactInfo.IdDocumento;
                TxtNumero.EditValue = contactInfo.Numero;
                CbSexo.EditValue = contactInfo.Sexo;
                TxtIngresoMes.EditValue = contactInfo.IngresoMes;
                TxtDireccion.EditValue = contactInfo.Direccion;
                TxtUbigeo.EditValue = contactInfo.Ubigeo;
                LayerEntity.Sistema.EUbigeo ub=SystemUtils.RecordManagerCommonList.GetUbigeoByUbigeo ( contactInfo .Ubigeo );
                if(ub!=null){
                    TxtDesUbigeo.EditValue = ub.ToString();
                }
                TxtCentroTrabajo.EditValue = contactInfo.CentroTrabajo;
                TxtOcupacion.EditValue = contactInfo.Ocupacion;
                TxtUbicacion.EditValue = contactInfo.Ubicacion;
                TxtTrabajoActual.EditValue = contactInfo.TrabajoActual;
                TxtTelefono.EditValue = contactInfo.Telefono;
                TxtMovil.EditValue = contactInfo.Movil;
                TxtRpm.EditValue = contactInfo.Rpm;
                TxtNextel.EditValue = contactInfo.Nextel;
                TxtWeb.EditValue = contactInfo.Web;
                TxtReferencia.EditValue = contactInfo.Referencia;
                TxtEmail.EditValue = contactInfo.EMail;                
            }
        }
        internal void NuevoContancto() {
            op = EnumOperaciones.Insertar;
            idRegistro = 0;
            idRelacion = 0;
            TxtContacto.EditValue =  string.Empty ;
            //CbDocumento.EditValue = string.Empty;
            TxtNumero.EditValue = string.Empty;
            //CbSexo.EditValue = 1;
            TxtIngresoMes.EditValue = 0.0;
            TxtDireccion.EditValue = string.Empty;
            TxtUbigeo.EditValue = string.Empty;
            TxtDesUbigeo.EditValue = string.Empty;
            TxtCentroTrabajo.EditValue = string.Empty;
            TxtOcupacion.EditValue = string.Empty;
            TxtUbicacion.EditValue = string.Empty;
            TxtTrabajoActual.EditValue = string.Empty;
            TxtTelefono.EditValue = string.Empty;
            TxtMovil.EditValue = string.Empty;
            TxtRpm.EditValue = string.Empty;
            TxtNextel.EditValue = string.Empty;
            TxtWeb.EditValue = string.Empty;
            TxtReferencia.EditValue = string.Empty;
            TxtEmail.EditValue = string.Empty;
            contactoExiste = false;
        }

        internal void SetTipo(int tipo) {
            tipoContacto = (LayerLogic.EnumTipoContacto)tipo;
        }
        internal void LoadDocumentos() {
            if (!BGWLoadDocumentos.IsBusy) {
                intProceso = 1;
                BGWLoadDocumentos.RunWorkerAsync();
            }
            
        }
        #endregion

        #region Funciones
        internal EContacto GetContacto()
        {
            EContacto contact = null;
            bool infoValida = true;
            if(string.IsNullOrEmpty (TxtContacto.EditValue.ToString())){
                SystemUtils.AlerMessaje("Ingrese el Nombre del Contacto");
                TxtContacto.Focus();
                infoValida = false;
                goto Exito;
            }
            if (CbDocumento.EditValue == null) {
                SystemUtils.AlerMessaje("Seleccione un Tipo de Documento");
                CbDocumento.Focus();
                infoValida = false;
                goto Exito;
            }

            if (string.IsNullOrEmpty(TxtNumero.EditValue.ToString())) {
                SystemUtils.AlerMessaje("Ingrese el Numero de Documento");
                TxtNumero.Focus();
                infoValida = false;
                goto Exito;
            }

            if (string.IsNullOrEmpty(TxtDesUbigeo.EditValue.ToString())) {
                SystemUtils.AlerMessaje("Seleccione un Ubigeo");
                TxtUbigeo.Focus();
                infoValida = false;
                goto Exito;
            }

            

            if (tipoContacto == LayerLogic.EnumTipoContacto.Aval || tipoContacto == LayerLogic.EnumTipoContacto.ContactoAval) {

                if (string.IsNullOrEmpty(TxtIngresoMes.EditValue.ToString())) {
                    SystemUtils.AlerMessaje("Ingrese Sueldo Base");
                    TxtIngresoMes.Focus();
                    infoValida = false;
                    goto Exito;
                }

                if (Convert.ToDouble(TxtIngresoMes.EditValue.ToString())<=0) {
                    SystemUtils.AlerMessaje("El Sueldo Base no Puede Ser " + (0.0).ToString("c2"));
                    TxtIngresoMes.Focus();
                    infoValida = false;
                    goto Exito;
                }

                if (string.IsNullOrEmpty(TxtCentroTrabajo.EditValue.ToString())) {
                    SystemUtils.AlerMessaje("Ingrese el Centro de Trabajo");
                    TxtCentroTrabajo.Focus();
                    infoValida = false;
                    goto Exito;
                }

                if (string.IsNullOrEmpty(TxtOcupacion.EditValue.ToString())) {
                    SystemUtils.AlerMessaje("Ingrese la Ocupacion");
                    TxtOcupacion.Focus();
                    infoValida = false;
                    goto Exito;
                }

                if (string.IsNullOrEmpty(TxtCentroTrabajo.EditValue.ToString())) {
                    SystemUtils.AlerMessaje("Ingrese el Centro de Trabajo");
                    TxtCentroTrabajo.Focus();
                    infoValida = false;
                    goto Exito;
                }

            }

            bool exiteTelefono = true;
            exiteTelefono = string.IsNullOrEmpty(TxtTelefono.EditValue.ToString().Trim());
            if (!exiteTelefono)
            {
                exiteTelefono = string.IsNullOrEmpty(TxtMovil.EditValue.ToString().Trim());
            }
            if (!exiteTelefono)
            {
                exiteTelefono = string.IsNullOrEmpty(TxtRpm.EditValue.ToString().Trim());
            }

            if (!exiteTelefono)
            {
                exiteTelefono = string.IsNullOrEmpty(TxtNextel.EditValue.ToString().Trim());
            }

            if (!exiteTelefono)
            {
                SystemUtils.AlerMessaje("Debe Ingresar al Menos un Numerode Telefono");
                TxtTelefono.Focus();
                infoValida = false;
                goto Exito;
            }            

            Exito:
            if (infoValida)
            {
                contact = new EContacto();
                contact.CentroTrabajo = TxtCentroTrabajo.EditValue.ToString();
                contact.Direccion = TxtDireccion.EditValue.ToString();
                contact.EMail = TxtEmail.EditValue.ToString();
                contact.IdDocumento = (int)CbDocumento.EditValue;
                contact.IdEstado = 1;
                contact.IdEstadoRelacion = 1;
                contact.IdPersona = "";
                contact.IdRelacion = idRelacion;
                contact.IngresoMes = (double)TxtIngresoMes.EditValue;
                contact.IsPrincipal = false;
                contact.Item = idRegistro;
                contact.Movil = TxtMovil.EditValue.ToString();
                contact.Nextel = TxtNextel.EditValue.ToString();
                contact.NombreContacto = TxtContacto.EditValue.ToString();
                contact.Numero = TxtNumero.EditValue.ToString();
                contact.Ocupacion = (string)TxtOcupacion.EditValue;
                contact.Referencia = (string)TxtReferencia.EditValue;
                contact.Rpm = (string)TxtRpm.EditValue;
                contact.Sexo =(int) CbSexo.EditValue;
                contact.Telefono = (string)TxtTelefono.EditValue;
                contact.TipoContacto =(int) tipoContacto;
                contact.TrabajoActual = (string)TxtTrabajoActual.EditValue;
                contact.Ubicacion = (string)TxtUbicacion.EditValue;
                contact.Ubigeo = (string)TxtUbigeo.EditValue;
                contact.Web = (string)TxtWeb.EditValue;
            }
            return contact ;
        }
        #endregion

        private void NoAction(object sender, DevExpress.XtraEditors.Controls.SpinEventArgs e)
        {
            e.Handled = true;
        }

        private void PresionandoTecla(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (sender == TxtContacto) {
                if (e.KeyCode == Keys.F1) { 
                    /*aqui docigo de busqueda de un contacto existente*/
                    BuscarContacto bc = new BuscarContacto();
                    bc.ShowDialog();
                    if (bc.Estado) {
                        contactoExiste = true;

                        int lastId = idRelacion;

                        SetContacto( bc.Contacto );
                        if (idRelacion != 0)
                        {
                            opRel = EnumOperaciones.Actualizar;
                        }
                        else
                        {
                            opRel = EnumOperaciones.Insertar;
                        }
                        idRelacion = lastId;
                    }
                    bc.Dispose();
                }
            }

            if (sender == CbDocumento || sender == CbSexo)
            {
                if (e.KeyCode == Keys.Enter)
                {
                    SendKeys.Send("{TAB}");
                }
                if (e.KeyCode == Keys.Up)
                {
                    SelectNextControl((Control)sender, false, true, true, true);
                }
            }
            else {
                if (e.KeyCode == Keys.Enter ||  e.KeyCode == Keys.Down) {
                    SendKeys.Send("{TAB}");
                }
                if (e.KeyCode == Keys.Up) {
                    SelectNextControl((Control)sender, false, true, true, true);
                }
            }
        }
        int intProceso = 0;
        private void BgwLoadDocumentosDoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            if (intProceso == 1)
            {
                e.Result = SystemUtils.RecordManagerCommonList.GetDocument(0);
            }
            else {
                e.Result = SystemUtils.RecordManagerPersona.GetSexos();
            }
        }

        private void BgwLoadDocumentosProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
        {

        }

        private void BgwLoadDocumentosRunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            if (intProceso == 1)
            {
                CbDocumento.Properties.DataSource = e.Result;
                intProceso = 2;
                BGWLoadDocumentos.RunWorkerAsync();
            }
            else {
                CbSexo.Properties.DataSource = e.Result;
            }
        }


    }
}